package cn.cdtu.tibetplan.service.impl;

import java.util.List;

import cn.cdtu.tibetplan.mapper.MenuMapper;
import cn.cdtu.tibetplan.pojo.Menu;
import cn.cdtu.tibetplan.pojo.MenuExample;
import cn.cdtu.tibetplan.pojo.PageResult;
import com.github.pagehelper.Page;
import org.springframework.beans.factory.annotation.Autowired;
import cn.cdtu.tibetplan.pojo.MenuExample.*;
import com.github.pagehelper.PageHelper;

import cn.cdtu.tibetplan.service.MenuService;

import org.springframework.stereotype.Service;

/**
 * 服务实现层
 *
 * @author Administrator
 */
@Service
public class MenuServiceImpl implements MenuService {

    @Autowired
    private MenuMapper menuMapper;

    /**
     * 查询全部
     */
    @Override
    public List<Menu> findAll() {
        return menuMapper.selectByExample(null);
    }

    /**
     * 按分页查询
     */
    @Override
    public PageResult findPage(int pageNum, int pageSize) {
        PageHelper.startPage(pageNum, pageSize);
        Page<Menu> page = (Page<Menu>) menuMapper.selectByExample(null);
        return new PageResult(page.getTotal(), page.getResult());
    }

    /**
     * 增加
     */
    @Override
    public void add(Menu menu) {
        menuMapper.insert(menu);
    }


    /**
     * 修改
     */
    @Override
    public void update(Menu menu) {
        menuMapper.updateByPrimaryKeySelective(menu);
    }

    /**
     * 根据ID获取实体
     *
     * @param id
     * @return
     */
    @Override
    public Menu findOne(Long id) {
        return menuMapper.selectByPrimaryKey(id.intValue());
    }

    /**
     * 批量删除
     */
    @Override
    public void delete(Long[] ids) {
        for (Long id : ids) {
            menuMapper.deleteByPrimaryKey(id.intValue());
        }
    }


    @Override
    public PageResult findPage(Menu menu, int pageNum, int pageSize) {
        PageHelper.startPage(pageNum, pageSize);

        MenuExample example = new MenuExample();
        Criteria criteria = example.createCriteria();

        if (menu != null) {
            if (menu.getName() != null && menu.getName().length() > 0) {
                criteria.andNameLike("%" + menu.getName() + "%");
            }
            if (menu.getLink() != null && menu.getLink().length() > 0) {
                criteria.andLinkLike("%" + menu.getLink() + "%");
            }
            if (menu.getOther1() != null && menu.getOther1().length() > 0) {
                criteria.andOther1Like("%" + menu.getOther1() + "%");
            }
            if (menu.getOther2() != null && menu.getOther2().length() > 0) {
                criteria.andOther2Like("%" + menu.getOther2() + "%");
            }
            if (menu.getOther3() != null && menu.getOther3().length() > 0) {
                criteria.andOther3Like("%" + menu.getOther3() + "%");
            }

        }

        Page<Menu> page = (Page<Menu>) menuMapper.selectByExample(example);
        return new PageResult(page.getTotal(), page.getResult());
    }

    @Override
    public List<Menu> findByPId(Menu menu) {
        MenuExample example = new MenuExample();
        Criteria criteria = example.createCriteria();

        if (menu != null) {
            if(menu.getPid()!=null){
                criteria.andPidEqualTo(menu.getPid());
            }
            if (menu.getName() != null && menu.getName().length() > 0) {
                criteria.andNameLike("%" + menu.getName() + "%");
            }
            if (menu.getLink() != null && menu.getLink().length() > 0) {
                criteria.andLinkLike("%" + menu.getLink() + "%");
            }
            if (menu.getOther1() != null && menu.getOther1().length() > 0) {
                criteria.andOther1Like("%" + menu.getOther1() + "%");
            }
            if (menu.getOther2() != null && menu.getOther2().length() > 0) {
                criteria.andOther2Like("%" + menu.getOther2() + "%");
            }
            if (menu.getOther3() != null && menu.getOther3().length() > 0) {
                criteria.andOther3Like("%" + menu.getOther3() + "%");
            }

        }

        List<Menu> menus = menuMapper.selectByExample(example);
        return menus;
    }

}
